﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using AcadPos.Entity;
using AcadPosApp.Utilidades;
using Microsoft.Reporting.WebForms;

namespace AcadPosApp.Cadastros
{
    public partial class CadastroProfissional : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            pnlConsulta.DefaultButton = btnConsultar.UniqueID;
            pnlCadastro.DefaultButton = btnConsultarCEP.UniqueID;

            if (!IsPostBack)
            {
                pnlConsulta.DefaultButton = btnConsultar.UniqueID;
                carregarBancos();
                pnlCadastro.DefaultButton = btnConsultarCEP.UniqueID;
            }
        }

        private void carregarBancos()
        {
            ddlBanco.Items.Clear();
            ddlBanco.DataValueField = "ID_BANCO";
            ddlBanco.DataTextField = "DESCRICAO";
            ddlBanco.DataSource = ControlClass.CNBanco.carregarBancos();
            ddlBanco.DataBind();
        }

        protected void btnInserir_Click(object sender, EventArgs e)
        {
            pnlCadastro.Visible = true;
            pnlDocumetos.Visible = false;
            pnlConsulta.Enabled = false;
            pnlDisciplinas.Visible = false;
            pnlTitulacoes.Visible = false;
            pnlRelatorios.Visible = false;
            btnConfirmar.CommandName = "Incluir";
            TrustX.Util.UtilForm.LimparCampos(pnlCadastro);
            carregarBancos();
            TxtNacionalidade.Text = "BRASILEIRA";
            ddlUF.SelectedValue = "SE";
            ddlUFNaturalidade.SelectedValue = "SE";
            ddlUFRG.SelectedValue = "SE";
        }

        protected void btnTitulacao_Click(object sender, EventArgs e)
        {
            pnlCadastro.Visible = false;
            pnlDisciplinas.Visible = false;
            pnlTitulacoes.Visible = true;
            pnlRelatorios.Visible = false;
            TrustX.Util.UtilForm.LimparCampos(pnlTitulacoes);
            carregarTitulacoes();
        }

        private void carregarTitulacoes()
        {
            int pCodProfissional = Convert.ToInt32(gvwProfissionais.SelectedDataKey["ID_PROFISSIONAL"]);
            gvwTitulacoes.DataSource = ControlClass.CNProfissional.getTitulacoes(pCodProfissional);
            gvwTitulacoes.DataBind();
        }

        protected void btnDisciplinas_Click(object sender, EventArgs e)
        {
            pnlDocumetos.Visible = false;
            pnlCadastro.Visible = false;
            pnlDisciplinas.Visible = true;
            pnlTitulacoes.Visible = false;
            pnlRelatorios.Visible = false;
            TrustX.Util.UtilForm.LimparCampos(pnlDisciplinas);
            carregarDisciplinasAptoMinistrar();
        }

        private void carregarDisciplinasAptoMinistrar()
        {
            int pCodProfissional = Convert.ToInt32(gvwProfissionais.SelectedDataKey["ID_PROFISSIONAL"]);
            gvwDiscCompativeisFormacao.DataSource = ControlClass.CNProfissional.getDisciplinasAptoMinistrar(pCodProfissional);
            gvwDiscCompativeisFormacao.DataBind();
        }

        private void carregaGridDisciplinas()
        {
            gvwPesquisaDisc.Visible = true;
            Disciplina disciplina = new Disciplina();
            disciplina.Descricao = TxtPesquisaDisc.Text;
            gvwPesquisaDisc.DataSource = ControlClass.CNDisciplina.listarDisciplina(disciplina);
            gvwPesquisaDisc.DataBind();
            gvwPesquisaDisc.SelectedIndex = -1;
        }

        protected void btnRelatorios_Click(object sender, EventArgs e)
        {
            pnlDocumetos.Visible = false;
            pnlCadastro.Visible = false;
            pnlConsulta.Enabled = false;
            pnlDisciplinas.Visible = false;
            pnlTitulacoes.Visible = false;
            pnlRelatorios.Visible = true;
        }

        protected void btnCancelarTitulacao_Click(object sender, EventArgs e)
        {
            pnlCadastroTitulacao.Visible = false;
            pnlConsulta.Enabled = true;
        }

        protected void btnCancelarDisc_Click(object sender, EventArgs e)
        {
            pnlCadastroDisc.Visible = false;
            gvwPesquisaDisc.DataSource = null;
            pnlConsulta.Enabled = true;
            //TrustX.Util.UtilForm.LimparCampos(pnlCadastroDisc); -- Metodo nao funciona
            Utilidades.MetodosAuxiliares.LimparTodosOsCampos(pnlCadastroDisc);
        }

        protected void btnCancelarRel_Click(object sender, EventArgs e)
        {
            pnlRelatorios.Visible = false;
            pnlConsulta.Enabled = true;
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            carregarProfissionais();
        }

        private void carregarProfissionais()
        {
            gvwProfissionais.DataSource = ControlClass.CNProfissional.listarProfissionais(TxtPesquisa.Text);
            gvwProfissionais.DataBind();
            gvwProfissionais.SelectedIndex = -1;
            pnlCadastro.Visible = false;
            pnlDisciplinas.Visible = false;
            pnlRelatorios.Visible = false;
            pnlTitulacoes.Visible = false;
            btnDisciplinas.Visible = false;
            //btnRelatorios.Visible = false;
            btnTitulacao.Visible = false;
            btnDocumentos.Visible = false;
        }

        protected void gvwProfissionais_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwProfissionais.PageIndex = e.NewPageIndex;
            carregarProfissionais();
        }

        protected void gvwProfissionais_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnDisciplinas.Visible = true;
            //btnRelatorios.Visible = true;
            btnTitulacao.Visible = true;
            btnDocumentos.Visible = true;
            pnlCadastro.Visible = false;
            pnlDisciplinas.Visible = false;
            pnlRelatorios.Visible = false;
            pnlTitulacoes.Visible = false;
        }

        protected void TxtCPF_TextChanged(object sender, EventArgs e)
        {
            if ((TxtCPF.Text != string.Empty) & (btnConfirmar.CommandName == "Incluir"))
            {
                if (ControlClass.CNProfissional.cpfJaCadastrado(TxtCPF.Text))
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Já existe o registro de um profissional com o CPF informado. Favor verifique!"), true);
                    pnlCadastro.Visible = false;
                    pnlConsulta.Enabled = true;
                }
            }
        }

        protected void btnConsultarCEP_Click(object sender, EventArgs e)
        {
            try
            {
                TrustX.DadosEndereco dadosEndereco = new TrustX.DadosEndereco();
                dadosEndereco = TrustX.Util.UtilForm.ObterDadosEndereco(TxtCEP.Text);
                if (dadosEndereco.Cidade != null)
                {
                    TxtCidade.Text = dadosEndereco.Cidade;
                    TxtBairro.Text = dadosEndereco.Bairro;
                    TxtEndereco.Text = dadosEndereco.Endereco;
                    ddlUF.SelectedValue = dadosEndereco.Estado;
                }
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, dadosEndereco.MsgRetorno)), true);
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Falha inesperada! " + ex.Message.ToString()), true);
            }
        }

        protected void gvwProfissionais_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Passando por todas as linhas
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }

            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[5].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[5].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[5].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[5].Visible = false;
            }
            #endregion
        }

        protected void gvwProfissionais_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton button = (ImageButton)e.Row.FindControl("ImgExcluir");
                button.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                button2.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button3 = (ImageButton)e.Row.FindControl("ImgRelatorio");
                button3.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                #region Preenchendo Objeto Profissional
                string usuario = User.Identity.Name;
                Profissional profissional = new Profissional();
                profissional.Agencia = TxtAgencia.Text;
                profissional.Bairro = TxtBairro.Text;
                profissional.Celular = TxtCel.Text;
                profissional.Cep = TxtCEP.Text;
                profissional.Cidade = TxtCidade.Text;
                profissional.CodBanco = Convert.ToInt32(ddlBanco.SelectedValue);
                profissional.Complemento = TxtComplemento.Text;
                profissional.Conta = TxtConta.Text;
                profissional.Cpf = TxtCPF.Text;
                profissional.Data_expedicao_rg = TxtDataExpedicao.Text;
                profissional.Ddd_celular = TxtDDDCel.Text;
                profissional.Ddd_telefone = TxtDDDFone.Text;
                profissional.Email = TxtEmail.Text;
                profissional.Endereco = TxtEndereco.Text;
                profissional.Estado_civil = ddlEstadoCivil.SelectedValue;
                profissional.Genero = ddlGenero.SelectedValue;
                profissional.Mae = TxtMae.Text;
                profissional.Nacionalidade = TxtNacionalidade.Text;
                profissional.Naturalidade = TxtNaturalidade.Text;
                profissional.Nome = TxtNome.Text;
                profissional.Numero = Convert.ToInt32(TxtNumero.Text);
                profissional.Numero_iss = TxtISS.Text;
                profissional.Numero_pis = TxtPIS.Text;
                profissional.Orgao_expeditor_rg = TxtOrgaoExpedidor.Text;
                profissional.Pai = TxtPai.Text;
                profissional.Registro_profissional = TxtNumRegProfissional.Text;
                profissional.Rg = TxtRG.Text;
                profissional.Situacao = ddlSituacao.SelectedValue;
                profissional.Telefone = TxtTelefone.Text;
                profissional.Uf_endereco = ddlUF.SelectedValue;
                profissional.Uf_naturalidade = ddlUFNaturalidade.SelectedValue;
                profissional.Uf_rg = ddlUFRG.SelectedValue;
                // profissional.Situacao = ddlSituacao.SelectedValue;
                #endregion

                if (btnConfirmar.CommandName == "Incluir")
                {
                    if (ControlClass.CNProfissional.inserirProfissional(profissional, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        carregarProfissionais();
                        pnlCadastro.Visible = false;
                        pnlConsulta.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
                else if (btnConfirmar.CommandName == "Alterar")
                {
                    profissional.Codigo = Convert.ToInt32(ViewState["ID_PROFISSIONAL"]);
                    if (ControlClass.CNProfissional.alterarProfissional(profissional, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoAlterar, "")), true);
                        carregarProfissionais();
                        pnlCadastro.Visible = false;
                        pnlConsulta.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
            }
        }

        protected void gvwProfissionais_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                Profissional profissional = new Profissional();
                int index = int.Parse((String)e.CommandArgument);
                profissional.Codigo = Convert.ToInt32(gvwProfissionais.DataKeys[index]["ID_PROFISSIONAL"].ToString());
                string usuario = User.Identity.Name;

                if (e.CommandName == "Alterar")
                {
                    profissional = ControlClass.CNProfissional.getDadosProfissional(profissional.Codigo);
                    pnlCadastro.Visible = true;
                    pnlConsulta.Enabled = false;
                    TxtAgencia.Text = profissional.Agencia;
                    TxtBairro.Text = profissional.Bairro;
                    TxtCel.Text = profissional.Celular;
                    TxtCEP.Text = profissional.Cep;
                    TxtCidade.Text = profissional.Cidade;
                    TxtComplemento.Text = profissional.Complemento;
                    TxtConta.Text = profissional.Conta;
                    TxtCPF.Text = profissional.Cpf;
                    TxtDataExpedicao.Text = profissional.Data_expedicao_rg.Substring(0, 10);
                    TxtDDDCel.Text = profissional.Ddd_celular.Trim();
                    // if (!profissional.Ddd_telefone.ToString().ElementAt(0).Equals("0"))
                    TxtDDDFone.Text = profissional.Ddd_telefone.Trim();
                    // TxtDDDFone.Text = profissional.Ddd_telefone;
                    TxtEmail.Text = profissional.Email;
                    TxtEndereco.Text = profissional.Endereco;
                    TxtISS.Text = profissional.Numero_iss;
                    TxtMae.Text = profissional.Mae;
                    TxtNacionalidade.Text = profissional.Nacionalidade;
                    TxtNaturalidade.Text = profissional.Naturalidade;
                    TxtNome.Text = profissional.Nome;
                    TxtNumero.Text = profissional.Numero.ToString();
                    TxtNumRegProfissional.Text = profissional.Registro_profissional.ToString();
                    TxtOrgaoExpedidor.Text = profissional.Orgao_expeditor_rg;
                    TxtPai.Text = profissional.Pai;
                    TxtPIS.Text = profissional.Numero_pis;
                    TxtRG.Text = profissional.Rg;
                    TxtTelefone.Text = profissional.Telefone.Trim();
                    ddlBanco.SelectedValue = profissional.CodBanco.ToString();
                    ddlEstadoCivil.SelectedValue = profissional.Estado_civil;
                    ddlGenero.SelectedValue = profissional.Genero;
                    ddlSituacao.SelectedValue = profissional.Situacao;
                    ddlUF.SelectedValue = profissional.Uf_endereco;
                    ddlUFNaturalidade.SelectedValue = profissional.Uf_naturalidade;
                    ddlUFRG.SelectedValue = profissional.Uf_rg;
                    ChkAtivo.Checked = profissional.Situacao == "A";
                    ViewState["ID_PROFISSIONAL"] = profissional.Codigo;
                    btnConfirmar.CommandName = "Alterar";
                }
                else if (e.CommandName == "Excluir")
                {
                    profissional = ControlClass.CNProfissional.getDadosProfissional(profissional.Codigo);

                    if (ControlClass.CNProfissional.excluirProfissional(profissional, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        carregarProfissionais();
                        pnlCadastro.Visible = false;
                        pnlConsulta.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
                else if (e.CommandName == "Relatorio")
                {
                    gerarRelDadosPessoais(index);
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                pnlCadastro.Visible = false;
                pnlConsulta.Enabled = true;
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            pnlCadastro.Visible = false;
            pnlDisciplinas.Visible = false;
            pnlRelatorios.Visible = false;
            pnlTitulacoes.Visible = false;
            pnlConsulta.Enabled = true;
            TrustX.Util.UtilForm.LimparCampos(pnlCadastro);
        }

        protected void btnInserirTitulacao_Click(object sender, EventArgs e)
        {
            pnlCadastroTitulacao.Visible = true;
            TrustX.Util.UtilForm.LimparCampos(pnlCadastroTitulacao);
            btnConfirmarTitulacao.CommandName = "Incluir";
            carregarNiveisTitulacao();
            carregarAnoConclusao();
        }

        private void carregarAnoConclusao()
        {
            ddlAnoConclusao.Items.Clear();
            for (int i = 1960; i < (DateTime.Now.Year + 6); i++)
            {
                ddlAnoConclusao.Items.Add(i.ToString());
            }
            ddlAnoConclusao.SelectedIndex = DateTime.Now.Year - 1960;
        }

        private void carregarNiveisTitulacao()
        {
            ddlNivelTitulacao.Items.Clear();
            DataTable dtTitulacoes = ControlClass.CNNivelTitulacao.listarNiveisTitulacao("");
            DataView dtTitualcoesAtivas = dtTitulacoes.AsDataView();
            dtTitualcoesAtivas.RowFilter = "SITUACAO = 'A' ";
            ddlNivelTitulacao.DataValueField = "ID_NIVEL_TITULACAO";
            ddlNivelTitulacao.DataTextField = "NIVEL";
            ddlNivelTitulacao.DataSource = dtTitualcoesAtivas.ToTable();
            ddlNivelTitulacao.DataBind();
        }

        protected void btnConfirmarTitulacao_Click(object sender, EventArgs e)
        {
            try
            {
                Titulacao titulacao = new Titulacao();
                titulacao.AnoConclusao = Convert.ToInt32(ddlAnoConclusao.SelectedValue);
                titulacao.CodNivelTitulacao = Convert.ToInt32(ddlNivelTitulacao.SelectedValue);
                titulacao.CodProfissional = Convert.ToInt32(gvwProfissionais.SelectedDataKey["ID_PROFISSIONAL"]);
                titulacao.Instituicao = TxtInstituicao.Text;
                titulacao.Titulo = TxtTitulacao.Text;
                titulacao.Situacao = ddlSituacaoTitulacao.SelectedValue;
                string usuario = User.Identity.Name;

                if (btnConfirmarTitulacao.CommandName == "Incluir")
                {
                    if (ControlClass.CNProfissional.incluirTitulacao(titulacao, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        pnlCadastroTitulacao.Visible = false;
                        pnlConsulta.Enabled = true;
                        carregarTitulacoes();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                        pnlCadastroTitulacao.Visible = false;
                    }
                }
                else if (btnConfirmarTitulacao.CommandName == "Alterar")
                {
                    titulacao.Codigo = Convert.ToInt32(ViewState["ID_PROFISSIONAL_TITULACAO"]);
                    if (ControlClass.CNProfissional.alterarTitulacao(titulacao, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoAlterar, "")), true);
                        pnlCadastroTitulacao.Visible = false;
                        pnlConsulta.Enabled = true;
                        carregarTitulacoes();
                    }
                }
            }
            catch (Exception)
            {

            }
        }

        protected void gvwTitulacoes_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Passando por todas as linhas
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }

            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[5].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[7].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[7].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[7].Visible = false;
            }
            #endregion
        }

        protected void gvwTitulacoes_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton button = (ImageButton)e.Row.FindControl("ImgExcluir");
                button.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                button2.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwTitulacoes_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                Titulacao titulacao = new Titulacao();
                int index = int.Parse((String)e.CommandArgument);
                titulacao.Codigo = Convert.ToInt32(gvwTitulacoes.DataKeys[index]["ID_PROFISSIONAL_TITULACAO"].ToString());
                if (e.CommandName == "Alterar")
                {
                    titulacao = ControlClass.CNProfissional.getDadosTitulacao(titulacao.Codigo);
                    carregarNiveisTitulacao();
                    carregarAnoConclusao();
                    pnlCadastroTitulacao.Visible = true;
                    pnlConsulta.Enabled = false;
                    ddlNivelTitulacao.SelectedValue = titulacao.CodNivelTitulacao.ToString();
                    ddlAnoConclusao.SelectedValue = titulacao.AnoConclusao.ToString();
                    ddlSituacaoTitulacao.SelectedValue = titulacao.Situacao;
                    TxtTitulacao.Text = titulacao.Titulo;
                    TxtInstituicao.Text = titulacao.Instituicao;
                    ViewState["ID_PROFISSIONAL_TITULACAO"] = titulacao.Codigo;
                    btnConfirmarTitulacao.CommandName = "Alterar";
                }
                else if (e.CommandName == "Excluir")
                {
                    string usuario = User.Identity.Name;
                    titulacao = ControlClass.CNProfissional.getDadosTitulacao(titulacao.Codigo);

                    if (ControlClass.CNProfissional.excluirTitulacao(titulacao, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        carregarTitulacoes();
                        pnlCadastroTitulacao.Visible = false;
                        pnlConsulta.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK_TB_PROFISSIONAL_DISCIPLINA_TB_PROFISSIONAL_TITULACAO"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else if (ex.Message.Contains("FK_TB_PROFISSIONAL_TITULACAO_TB_NIVEL_TITULACAO"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else if (ex.Message.Contains("FK_TB_PROFISSIONAL_TITULACAO_TB_PROFISSIONAL"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else if (ex.Message.Contains("FK"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                pnlCadastroTitulacao.Visible = false;
                pnlConsulta.Enabled = true;
            }
        }

        protected void btnInserirDisc_Click(object sender, EventArgs e)
        {
            pnlCadastroDisc.Visible = true;
            //TrustX.Util.UtilForm.LimparCampos(pnlCadastroDisc);  -- Método nao funciona...
            Utilidades.MetodosAuxiliares.LimparTodosOsCampos(pnlCadastroDisc);
            btnConfirmarDisc.CommandName = "Incluir";
        }

        protected void btnPesquisaDisc_Click1(object sender, EventArgs e)
        {
            carregaGridDisciplinas();
        }

        protected void btnConfirmarDisc_Click(object sender, EventArgs e)
        {
            if (gvwPesquisaDisc.SelectedIndex >= 0)
            {
                int pCodProfissional = Convert.ToInt32(gvwProfissionais.SelectedDataKey["ID_PROFISSIONAL"]);
                int pCodDisciplina = Convert.ToInt32(gvwPesquisaDisc.SelectedDataKey["ID_DISCIPLINA"]);
                string usuario = User.Identity.Name;


                if (!ControlClass.CNProfissional.disciplinaJaExistenteMinistrar(pCodProfissional, pCodDisciplina))
                {
                    if (ControlClass.CNProfissional.incluirDisciplinaMinistrar(pCodProfissional, pCodDisciplina, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        carregarDisciplinasAptoMinistrar();
                        pnlCadastroDisc.Visible = false;
                        pnlConsulta.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Disciplina informada já é compatível com a formação do profissional!"), true);
                }
            }
            else
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Por favor, selecione a disciplina que deseja incluir!"), true);
            }
        }

        protected void gvwDiscCompativeisFormacao_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton button = (ImageButton)e.Row.FindControl("ImgExcluir");
                button.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwDiscCompativeisFormacao_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Passando por todas as linhas
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }
        }

        protected void gvwDiscCompativeisFormacao_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "Excluir")
                {
                    int index = int.Parse((String)e.CommandArgument);
                    int pCodProfissionalDisc = Convert.ToInt32(gvwDiscCompativeisFormacao.DataKeys[index]["ID_PROFISSIONAL_DISCIPLINA"].ToString());
                    string usuario = User.Identity.Name;

                    if (ControlClass.CNProfissional.excluirDisciplinaMinistrar(pCodProfissionalDisc, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        carregarDisciplinasAptoMinistrar();
                        pnlCadastroDisc.Visible = false;
                        pnlConsulta.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Esse registro não pode ser excluído, pois já existem cadastros que dependem do mesmo!"), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
            }
        }

        protected void btnDocumentos_Click(object sender, EventArgs e)
        {
            pnlDocumetos.Visible = true;
            pnlConsulta.Enabled = false;
            pnlDisciplinas.Visible = false;
            pnlRelatorios.Visible = false;
            pnlTitulacoes.Visible = false;
            carregarDocumentos();
        }

        private void carregarDocumentos()
        {
            int pMatricula = Convert.ToInt32(gvwProfissionais.SelectedDataKey["ID_PROFISSIONAL"].ToString());
            ddlDocumento.Items.Clear();
            ddlDocumento.DataSource = ControlClass.CNDocumento.listarDocumentos(pMatricula, false);
            ddlDocumento.DataTextField = "DESCRICAO";
            ddlDocumento.DataValueField = "ID_DOCUMENTO";
            ddlDocumento.DataBind();

            gvwDocPendente.DataSource = ControlClass.CNDocumento.obterDocumentosXProfissional(pMatricula);
            gvwDocPendente.DataBind();
        }

        protected void btnCancelarDoc_Click(object sender, EventArgs e)
        {
            pnlDocumetos.Visible = false;
            pnlConsulta.Enabled = true;
        }

        protected void btnIncluirDoc_Click(object sender, EventArgs e)
        {
            try
            {
                if (ddlDocumento.SelectedIndex >= 0)
                {
                    int pMatricula = Convert.ToInt32(gvwProfissionais.SelectedDataKey["ID_PROFISSIONAL"].ToString());
                    string pEmail = gvwProfissionais.SelectedDataKey["EMAIL"].ToString();
                    string usuario = User.Identity.Name;

                    if (ControlClass.CNDocumento.inserirDocumentoPendenteProfissional(pMatricula, Convert.ToInt32(ddlDocumento.SelectedValue), usuario))
                    {
                        #region Formato Email
                        string corpoEmail = string.Format(@"<html>
                                                <head>
                                                    <title>AcadPos -  Pendência de Documentos</title>
                                                </head>
                                                <body style='font-family:Verdana; font-size:10pt;'>
                                                    <b>Portal de Serviços - AcadPos</b><br />
                                                    <p>O AcadPos recebeu um registro de pendência relacionado à um ou mais documentos referente ao seu cadastro.</p>
                                                    <p>Favor regularize sua situação o mais breve possível!</p>
                                                    <p>Pendência:&nbsp;&nbsp;<b>{0}</b><br /></p>
                                                    <br />
                                                    <br />
                                                 </body>
                                                </html>", ddlDocumento.SelectedItem.Text);
                        #endregion
                        TrustX.IO.Suporte.EnviarEmail(pEmail, "Pendência de Documento", corpoEmail, string.Empty);
                        carregarDocumentos();
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Pendência de documento incluída com sucesso!"), true);
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                    }
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Favor informe o documento que deseja inserir como pendência!"), true);
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Falha inesperada! " + ex.Message.ToString()), true);
            }
        }

        protected void gvwDocPendente_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton button = (ImageButton)e.Row.FindControl("ImgRemover");
                button.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwDocPendente_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            #region Configurando Alert de Confirmação
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Passando por todas as linhas
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Remover")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja remover esta pendência?', '" + button.ClientID + "');";
                        }
                    }
                }
            }
            #endregion
        }

        protected void gvwDocPendente_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = int.Parse((String)e.CommandArgument);
                int pCodDoc = Convert.ToInt32(gvwDocPendente.DataKeys[index]["ID_DOCUMENTO"].ToString());
                string documento = gvwDocPendente.Rows[index].Cells[1].Text;
                int pMatricula = Convert.ToInt32(gvwProfissionais.SelectedDataKey["ID_PROFISSIONAL"].ToString());
                string pEmail = gvwProfissionais.SelectedDataKey["EMAIL"].ToString();
                string usuario = User.Identity.Name;

                if (e.CommandName == "Remover")
                {
                    if (ControlClass.CNDocumento.removerPendenciaProfissional(pMatricula, pCodDoc, usuario))
                    {
                        #region Formato Email
                        string corpoEmail = string.Format(@"<html>
                                                <head>
                                                    <title>AcadPos -  Quitação de Pendência de Documentos</title>
                                                </head>
                                                <body style='font-family:Verdana; font-size:10pt;'>
                                                    <b>Portal de Serviços - AcadPos</b><br />
                                                    <p>O AcadPos recebeu um registro de quitação relacionado à um ou mais documentos referente ao seu cadastro que encontrava-se pendente.</p>
                                                    <p>Obrigado por regularizar a sua situação!</p>
                                                    <p>Documento entregue:&nbsp;&nbsp;<b>{0}</b><br /></p>
                                                    <br />
                                                    <br />
                                                 </body>
                                                </html>", documento);
                        #endregion
                        TrustX.IO.Suporte.EnviarEmail(pEmail, "Quitação de Pendência de Documentos", corpoEmail, string.Empty);
                        carregarDocumentos();
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", "Pendência removida com sucesso!"), true);
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, ex.Message.ToString())), true);
                pnlConsulta.Enabled = true;
            }
        }

        protected void btnImprimir_Click(object sender, EventArgs e)
        {
            //if (rbTipoRel.SelectedValue == "Dados Pessoais")
            //{
            //    gerarRelDadosPessoais();
            //}
        }

        private void gerarRelDadosPessoais(int index)
        {
            try
            {
                int pCodigo = Convert.ToInt32(gvwProfissionais.DataKeys[index]["ID_PROFISSIONAL"].ToString());
                DataTable dtImp = ControlClass.CNProfissional.GetDadosPessoaisProfissional(pCodigo);
                if (dtImp.Rows.Count == 0)
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('Não há registros à serem impressos!', function() {});", true);
                }
                else
                {
                    ReportViewer ReportViewer1 = new ReportViewer();
                    ReportViewer1.Visible = true;
                    ReportViewer1.ProcessingMode = ProcessingMode.Local;
                    LocalReport relatorio = ReportViewer1.LocalReport;
                    relatorio.ReportPath = Server.MapPath(@"~/Relatorios/relDadosPessoaisProfissional.rdlc");
                    ReportViewer1.Reset();

                    ReportDataSource rds1 = new ReportDataSource();
                    rds1.Name = "DataSet1";
                    rds1.Value = dtImp;

                    ReportDataSource rds2 = new ReportDataSource();
                    rds2.Name = "DataSet2";
                    rds2.Value = ControlClass.CNParametros.getCabecalhoRelatorio();

                    relatorio.DataSources.Clear();
                    relatorio.DataSources.Add(rds1);
                    relatorio.DataSources.Add(rds2);
                    relatorio.Refresh();

                    #region Gerar PDF
                    Warning[] warn = null;
                    string[] streamids = null;
                    string mimeType = "application/pdf";
                    string encoding = string.Empty;
                    string extension = string.Empty;
                    byte[] byteViewer;

                    byteViewer = relatorio.Render("pdf", null, out mimeType, out encoding, out extension, out streamids, out warn);
                    Response.Buffer = true;
                    Response.Clear();
                    Response.ContentType = "application/pdf";
                    Response.AddHeader("content-disposition", "attachment; filename=DadosPessoais.pdf");
                    Response.BinaryWrite(byteViewer);
                    Response.Flush();

                    Response.End();
                    Response.ClearContent();
                    #endregion
                }
            }
            catch (Exception)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('Falha ao tentar gerar o relatório. Tente novamente!', function() {});", true);
            }
        }

        protected void gvwTitulacoes_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwTitulacoes.PageIndex = e.NewPageIndex;
            carregarTitulacoes();
        }

        protected void gvwPesquisaDisc_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwPesquisaDisc.PageIndex = e.NewPageIndex;
            carregaGridDisciplinas();
        }

        protected void btnCancelarDiscCompativeis_Click(object sender, EventArgs e)
        {
            gvwDiscCompativeisFormacao.DataSource = null;
            pnlDisciplinas.Visible = false;
        }

    }
}